/**
 * 
 */
package com.bs.areport.action.master;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.bs.restframework.context.SystemContext;
import com.bs.restframework.context.util.SystemContextUtil;
import com.bs.restframework.session.UserSession;
import com.bs.restframework.web.result.ResultModle;
import com.bs.restframework.web.result.ResultType;
import com.bs.areport.service.master.UserGroupDao;
import com.bs.areport.service.master.UserManageDao;
import com.bs.areport.service.util.DataUtil;
import com.bs.areport.service.util.EntityType;
import com.bs.areport.service.util.ValiData;

/**
 * 
 * @ClassName   类名：UserGroupAction 
 * @Description 功能说明：用户组管理控制类
 * TODO
 ************************************************************************
 * @date        创建日期：2012-03-08
 * @author      创建人：李新宇
 * @version     版本号：V1.0
 ***************************修订记录*************************************
 * 
 * 2012-03-08   李新宇     创建类
 *   
 ***********************************************************************
 */
public class UserGroupAction {
	private UserGroupDao dao;
	public  UserGroupDao getDao() {
		return dao;
	}

	public void setDao(UserGroupDao dao) {
		this.dao = dao;
	}
	
	/**
	 * 
	 * <p>函数名称：list</p>
	 * <p>功能说明：查询列表</p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-08</p>
	 * <p>作者：李新宇</p>
	 */
	public ResultModle list() throws Exception
	{
		Map<String, Object> params = SystemContext.getInParams();
		
        Map<String, Object> resultBean = dao.list(params);
        
		return new ResultModle(ResultType.OUTPUT_JSON_STREAM, "user", resultBean);
	}
	
	/**
	 * 
	 * <p>函数名称：comboxList</p>
	 * <p>功能说明：查询下拉列表</p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-08</p>
	 * <p>作者：李新宇</p>
	 */
	@SuppressWarnings("unchecked")
	public ResultModle comboxList() throws Exception
	{
		Map<String, Object> params = SystemContext.getInParams();
		@SuppressWarnings("unused")
		String token =(String)params.get("Token");
		UserSession userSession = SystemContextUtil.getSessionMange().getUserSession((String)params.get("Token"));
		String userID = userSession.getUserID().toString();
		String condition = "" ;
		if(userID==null||"".equals(userID))
		{
			condition="" ;
		}
		else
		{
			Map<String, Object> resultBean=dao.getUserInfoByID(userID);
			String deptID = (String) resultBean.get("F_DEPTID");
			if(deptID!=null&&deptID.equals("")==false)
			{
				condition = " AND F_DEPTID='"+deptID+"'" ;
				params.put("CONDITION", condition);
			}
			else
			{
				condition = " AND F_DEPTID='"+userID+"'" ;
				params.put("CONDITION", condition);
			}
		}
		Map<String, Object> nullRow = new HashMap<String, Object>();
		nullRow.put("id", "");
		nullRow.put("text", "······请选择用户分组······");
		List<Map> listMap = new ArrayList() ;		
		listMap  = dao.comboxList(params);
		listMap.add(0, nullRow) ;
		return new ResultModle(ResultType.OUTPUT_JSON_STREAM, "user", listMap);
	}
	
	/**
	 * 
	 * <p>函数名称：getMaxCode</p>
	 * <p>功能说明：获取最大编码值/p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-08</p>
	 * <p>作者：陈金滨</p>
	 */
	public ResultModle getMaxCode() throws Exception
	{		
		Map<String, Object> params = SystemContext.getInParams();
		String token =(String)params.get("Token");
		UserSession userSession = SystemContextUtil.getSessionMange().getUserSession((String)params.get("Token"));
		String loadUserType = userSession.getUserType().toString() ;
		String userid = userSession.getUserID().toString() ;
		String loadCode = "" ;
		if("A".equals(loadUserType)==false)
		{
			Object loadDeptCode = userSession.getAttribute("deptCode").toString() ;
			
			if(loadDeptCode!=null&&"".equals(loadDeptCode)==false)
			{
				loadCode = loadDeptCode.toString();
				
//				loadLevel = dao.getLevel(loadCode);			
			}	
		}
		Map<String, Object> resultBean=dao.getMaxCode(userid);
		if(resultBean!=null)
		{
			String MaxCode=(String)resultBean.get("F_CODE");
			int codelen = MaxCode.length() ;
			int oldcode = Integer.valueOf(MaxCode).intValue();
			oldcode = oldcode + 1 ;
			String newCode = String.valueOf(oldcode).toString();
			int codelen2 = newCode.length();
			if(codelen2<codelen)
			{
				for(int i=0;i<(codelen-codelen2);i++)
				{
					newCode = "0"+newCode ;
				}			
			}
			resultBean.put("F_CODE", newCode);		
		}
		else
		{
			String newCode = loadCode + "01" ;
			resultBean = new HashMap<String, Object>();
			resultBean.put("F_CODE", newCode);
		}
		return new ResultModle(ResultType.OUTPUT_JSON_STREAM, "user", resultBean);
	}
	
	/**
	 * 
	 * <p>函数名称：edit</p>
	 * <p>功能说明：编辑</p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-08</p>
	 * <p>作者：李新宇</p>
	 * @throws Exception 
	 */
	public ResultModle edit() throws Exception{
		Map<String, Object> params = SystemContext.getInParams();
        String groupID = (String) params.get("F_ID");
        String groupCode = (String) params.get("F_CODE");
        String groupCodeOld= dao.getCodebyID(groupID);
		boolean tag = false;
		String msg = "";
		//最后修改时间
        Date currentTime = new Date();
	    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmsssss");
	    String dateString = formatter.format(currentTime);		
	    params.put("F_LASTTIME", dateString);		
		try
		{   
			//编码不存在，或者编码存在但是和原编码一致（即编码没修改）时刻更改信息
			if(groupCode.equals(groupCodeOld))
			{				
				if ("".equals(msg))
				{
				    msg = dao.edit(params);
					tag = true;
					msg = "修改成功!";
				}					
			}
			else
			{
				//判断编码是否存在
				if(dao.isCodeExist(groupCode)==false)
				{
					if ("".equals(msg))
					{
					    msg = dao.edit(params);
						tag = true;
						msg = "修改成功!";
					}						
				}
				else{msg="编码已存在，请重新输入!";}					
			}
		}
		catch(Exception e)
		{
			msg = "修改失败" + e;
		}
        
		Map<String, Object> resultBean=new HashMap<String, Object>();
		resultBean.put("msg", msg);
		resultBean.put("tag", tag);
		return new ResultModle(ResultType.OUTPUT_JSON_STREAM, "user", resultBean);

	}
	
	/**
	 * 
	 * <p>函数名称：del</p>
	 * <p>功能说明：删除</p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-08</p>
	 * <p>作者：李新宇</p>
	 */
	public ResultModle del() throws Exception{
		Map<String, Object> params = SystemContext.getInParams(); 
	    String groupID = (String) params.get("F_ID");
		boolean tag=false;
		String msg =""; 
		//判断该用户分组是否已经被使用
		boolean isUsed = dao.isGroupUsed(groupID);
		if(isUsed)
			msg = "该分组已被使用，不能删除!" ;
		try
		{
			if("".equals(msg))
			{
				msg = dao.del(params);
				if("".equals(msg))
				{
					tag = true;
					msg = "删除成功!";
				}
				else
				{
					msg = "删除失败!";
				}		
			}		
		}
		catch(Exception e)
		{
			msg = "删除失败 " + e;
		}
		
		Map<String, Object> resultBean=new HashMap<String, Object>();
		resultBean.put("msg", msg);
		resultBean.put("tag", tag);
		return new ResultModle(ResultType.OUTPUT_JSON_STREAM, "user", resultBean);

	}
	
	/**
	 * 
	 * <p>函数名称：add</p>
	 * <p>功能说明：添加</p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-08</p>
	 * <p>作者：李新宇</p>
	 * @throws Exception 
	 */
	public ResultModle add() throws Exception{
		Map<String, Object> params = SystemContext.getInParams();
		boolean tag = false;
		String msg = "";
		String groupCode = (String) params.get("F_CODE");
		
        Date currentTime = new Date();
	    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmsssss");
	    String dateString = formatter.format(currentTime);		
	    params.put("F_LASTTIME", dateString);
	    
	    String token =(String)params.get("Token");
		UserSession userSession = SystemContextUtil.getSessionMange().getUserSession((String)params.get("Token"));
		String userType = userSession.getUserType().toString() ;
		String userID = userSession.getUserID().toString();
		
		String deptID = "" ;
		
		/*如果当前登陆用户是超级用户，则将超级用户id 添加到 所属单位字段。
		否则 则将当前登陆用户所属单位添加到 所属单位字段*/		
		if("A".equals(userType)) 
		{								
			deptID = userID ;
		}		
		else
		{			
			deptID=userSession.getAttribute("deptID").toString() ;
		}
		params.put("F_DEPTID", deptID);
		try
		{
			if(dao.isCodeExist(groupCode)==false)
			{				
				if("".equals(msg))
				{   
					msg = dao.add(params);     
					tag = true;
					msg = "新增成功!";
				}				
			}
			else
			{
				msg = "编码已存在!" ;
			}

		}
		catch(Exception e)
		{
			msg = "新增失败 " + e;
		}
		Map<String, Object> resultBean=new HashMap<String, Object>();
		resultBean.put("msg", msg);
		resultBean.put("tag", tag);
		return new ResultModle(ResultType.OUTPUT_JSON_STREAM, "user", resultBean);
	}
	/**
	 * 
	 * <p>函数名称：IsBmExist</p>
	 * <p>功能说明：判断编码是否存在/p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-19</p>
	 * <p>作者：陈金滨</p>
	 * @param <Boolen>
	 * @param MaxCode 
	 */
//	public boolean isBmExist(String code) throws Exception
//	{				
//		boolean result = dao.isBmExist(code);
//		
//		return result;
//	}		
	
	/**
	 * 
	 * <p>函数名称：ChangeUpleaf</p>
	 * <p>功能说明：修改上级节点最细级字段/p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-19</p>
	 * <p>作者：陈金滨</p>
	 * @param <Boolen>
	 * @param MaxCode 
	 */
//	public <Boolen> boolean ChangeUpleaf(String Code,String BusType) throws Exception
//	{				
//		boolean result = dao.ChangeUpleaf(Code,BusType);
//		
//		return result;
//	}		
	/**
	 * 
	 * <p>函数名称：IsLeaf</p>
	 * <p>功能说明：修改上级节点最细级字段/p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-19</p>
	 * <p>作者：陈金滨</p>
	 * @param <Boolen>
	 * @param MaxCode 
	 */
//	public <Boolen> boolean IsLeaf(String ID) throws Exception
//	{				
//		boolean result = dao.IsLeaf(ID);
//		
//		return result;
//	}
	/**
	 * 
	 * <p>函数名称：IsBmNum</p>
	 * <p>功能说明：判断编码是否为数字/p>
	 * <p>参数说明：</p>
	 * <p>创建时间：2012-03-19</p>
	 * <p>作者：陈金滨</p>
	 * @param <Boolen>
	 * @param MaxCode 
	 */
//	public String IsBmNum(String Code) throws Exception
//	{				
//		boolean result = true;
//		String msg="" ;
//		int lenBm= Code.length() ;
//		for(int i=0;i<lenBm;i++)
//		{
//			int CharValue = (int)Code.charAt(i);
//			if(CharValue<48||CharValue>57)
//			{
//				result = false ;
//				break ;
//			}
//		}
//		if(!result)
//		{
//			msg = "编码只能为数字!" ;
//		}
//		return msg;
//	}	

}
